package com.comment.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.comment.util.ValidateUtils;

/**
 * 过滤器
 * 
 * @author Wangpeihu
 * @since 07/01/2010
 */
public class AuthorizeFilter implements Filter {

	/**
	 * 该方法有容器在销毁过滤器实例之前调用
	 */
	public void destroy() {
		System.out
				.println("这个单词的读音是：[disˊtrɒi]，他的意思是 损毁; 毁坏; 破坏，if you call this method , 那就将该过滤器销毁");

	}

	/**
	 * 该方法用于处理请求和响应，他接受3个输入参数<br>
	 * ServletRequest,ServletResponse,FilterChain[tʃen;tʃein]<链子,项链><br>
	 * FilterChain对于正确的过滤器操作非常重要，<br>
	 * doFilter()方法必须调用FilterChain的doFilter()方法，除非该方法用来拦截以后的下游处理.
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

		/** 由于Validate里面的使用的参数和这里的request不一样，所以要转换一下 */
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
		if (ValidateUtils.validate(req)) {

			/**
			 * 这里的doFilter()方法起了一个传递的角色，如果到了这一步，说明已经被过滤好了。<br>
			 * 上面的if里面的条件就是我们过滤的条件,即----判断用户是否登录，因为不是所有的请求都需要过滤的<br>
			 * 当我们需要过滤的时候，只需要在web.xml配置文件里面加上<filter></filter>这个标签就OK了<br>
			 */
			chain.doFilter(req, resp);
		} else {
			resp.sendRedirect("loginform");
		}

	}

	/**
	 * 该方法是容器实力在初始化过滤器时被调用,他主要用于使过滤器为处理作准备。<br>
	 * 容器为这给方法传递一个FilterConfig对象，其中包含了配置信息<br>
	 */
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("初始化方法，在一开始就调用了，就一次");

	}

}
